# -*- coding: utf-8 -*-#
#-------------------------------------------------------------------------------
# 建立者:        黄周云  
# Name:         test01
# Description:  sqlalchemy
# Author:       ASUS
# Date:         2019/4/2
#-------------------------------------------------------------------------------


#连接数据库
from sqlalchemy import create_engine,MetaData,Table,Column,Integer,String,Float,exc,orm
from sqlalchemy.ext.declarative import declarative_base
#定义mysql连接字符串
mysql = 'mysql+mysqlconnector://root:980721@localhost:3306/school?charset=utf8'
#创建数据库引擎,返回一个对象
engine = create_engine(mysql,encoding='utf-8',echo=False)
#开始连接数据库
engine.connect()

#创建表
#创建MetaData对象
metadata = MetaData(engine)
#创建用于描述表中字段信息的Table对象
person = Table('users',metadata,
               Column('id',Integer,primary_key=True),
               Column('name',String(30)),
               Column('age',Integer))
#创建表
metadata.create_all(engine)

#定义与表对应的python类，需要从Base继承
Base = declarative_base()
#与表users对应的User类
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer,primary_key=True)
    name = Column(String(30))
    age = Column(Integer)

#创建会话
Session = orm.sessionmaker(bind=engine)
session = Session()

#插入记录,创建User类的实例
user = User(id=1,name='John',age=50)
session.add(user)
#必须调用commit方法，对数据库的修改才会生效
session.commit()

#查询记录,返回一个可迭代对象
query = session.query(User).filter(User.name == 'John')
#将查询结果转换为单一对象（User对象）,只用于查绚结果只有一条
user1 = query.scalar()

#更改记录
user1.name = 'Mike'
session.commit()
#查询name等于Mike的记录，将所有记录的name字段值替换成Bill
session.query(User).filter(User.name == 'Mike').update({'name':'Bill'})
session.commit()

#删除记录11
user2 = User(id=2,name='Marry',age=35)
session.add(user2)
session.commit()
session.delete(user2)
session.commit()
session.query(User).filter(User.name == 'Bill').delete()
session.commit()

#关闭会话
session.close()



